// zip 解压工具
import AdmZip from 'adm-zip';
import fs from 'fs';
import fse from 'fs-extra';
import pth from 'path';

// 更改当前工作目录为脚本所在目录
const scriptDir = pth.dirname(import.meta.url.replace('file:///', ''));
process.chdir(scriptDir);

// 创建临时目录和输出目录
const tmpDir = './tmp';
fse.ensureDirSync(tmpDir);
fse.emptyDirSync(tmpDir);

// 查找当前目录下violentmonkey_开头的zip文件
const zipFiles = fs.readdirSync('.')
									 .sort().reverse()
									 .filter(file=>file.startsWith('violentmonkey_') && file.endsWith('.zip'))
									 .slice(0, 1);
if (zipFiles.length===0){
	console.error('没有找到violentmonkey_开头的zip文件');
	process.exit(1);
}
const zipFile = zipFiles[0];

// 解压所有文件
new AdmZip(zipFile).extractAllTo(tmpDir);

// 修改所有以 .user.js 结尾的文件
const randomParam = `?${Math.random().toString(36).slice(2)}`;
const newLoader = `loader.js${randomParam}`; // 共享一个新的loader，防止重复下载
fs.readdirSync(tmpDir).forEach(file=>{
	if (!file.endsWith('.user.js')){
		return;
	}
	const filePath = pth.join(tmpDir, file);
	// 读取文件
	const content = fs.readFileSync(filePath);
	// 将loader的url提取并生成随机的查询参数
	const pattern = new RegExp(String.raw`//\s+@require\s+https://gitee\.com/viocha/gm-util/raw/main/loader\.js(.*)?`);
	const newContent = content.toString()
														.replace(pattern,
																		 (match)=>{
																			 return match.replace('loader.js', newLoader);
																		 });
	// 写入文件
	fs.writeFileSync(filePath, newContent);
});

// 压缩到output目录下
const zip = new AdmZip();
zip.addLocalFolder(tmpDir);
await zip.writeZipPromise('new-'+zipFile);

// 删除临时目录
fse.removeSync(tmpDir);
